/*
 * www.7yangche.com Inc.
 * Copyright (c) 2014 All Rights Reserved.
 */
package com.catena.core.inject;

/**
 * 支持自动注入。
 *
 * @author cyzhang
 */
public class AutowiredSupport {

    /**
     * 默认关闭自动注入，优化性能。
     */
    public AutowiredSupport() {
        this(false);
    }

    /**
     * 自动注入标记。
     *
     * @param autowiring true，表示该对象在创建时进行自动注入。
     */
    public AutowiredSupport(boolean autowiring) {
        if (autowiring) {
            InjectionContext.autowireBean(this);
        }
    }

    /**
     * 获得指定的 Bean 对象。
     *
     * @param targetType 目标类型。
     * @return 目标对象。
     */
    protected <T> T getBean(Class<T> targetType) {
        return InjectionContext.getBean(targetType);
    }

    /**
     * 获得指定的 Bean 对象。
     *
     * @param targetType 目标类型。
     * @return 目标对象。
     */
    protected <T> T getBean(Class<T> targetType, String qualifier) {
        return InjectionContext.getBean(targetType, qualifier);
    }

    protected void autowired(Object target) {
        InjectionContext.autowireBean(target);
    }
}
